package singleton

import "sync"

type singleton struct {
	count int
}

var (
	instance *singleton
	mutex    sync.Mutex
)

func New() *singleton {
	if instance == nil { //第一次检查
		//到这里可能有多余一个goroutine同时到达
		mutex.Lock()
		//每次到这里只会有一个goroutine
		if instance == nil { //第二次检查
			instance = new(singleton)
		}
		mutex.Unlock()
	}
	return instance
}

func (s *singleton) Add() int {
	s.count++
	return s.count
}
